home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / ruby / 1.8 / digest.rb < prev    next >
Text File  |  2008-09-19  |  1KB  |  51 lines

  1. require 'digest.so'
  2.  
  3. module Digest
  4.   def self.const_missing(name)
  5.     case name
  6.     when :SHA256, :SHA384, :SHA512
  7.       lib = 'digest/sha2.so'
  8.     else
  9.       lib = File.join('digest', name.to_s.downcase)
  10.     end
  11.  
  12.     begin
  13.       require lib
  14.     rescue LoadError => e
  15.       raise LoadError, "library not found for class Digest::#{name} -- #{lib}", caller(1)
  16.     end
  17.     unless Digest.const_defined?(name)
  18.       raise NameError, "uninitialized constant Digest::#{name}", caller(1)
  19.     end
  20.     Digest.const_get(name)
  21.   end
  22.  
  23.   class ::Digest::Class
  24.     # creates a digest object and reads a given file, _name_.
  25.     # 
  26.     #  p Digest::SHA256.file("X11R6.8.2-src.tar.bz2").hexdigest
  27.     #  # => "f02e3c85572dc9ad7cb77c2a638e3be24cc1b5bea9fdbb0b0299c9668475c534"
  28.     def self.file(name)
  29.       new.file(name)
  30.     end
  31.   end
  32.  
  33.   module Instance
  34.     # updates the digest with the contents of a given file _name_ and
  35.     # returns self.
  36.     def file(name)
  37.       File.open(name, "rb") {|f|
  38.         buf = ""
  39.         while f.read(16384, buf)
  40.           update buf
  41.         end
  42.       }
  43.       self
  44.     end
  45.   end
  46. end
  47.  
  48. def Digest(name)
  49.   Digest.const_get(name)
  50. end
  51.